package ro.inf.bomberman;

/**
 * Bietet alle nötigen Methoden an, die zum Erstellen Verwalten und Explodieren
 * für das Spielfeldelement Block benötigt werden.
 *
 * @author Felix
 */
public class Block extends Explosion implements Drawable {

    private Size size;
    private Coordinate coords;
    private boolean explodable;

    /**
     * Konstruktor
     *
     * @author Felix
     * @param coordinates
     * @param explodable
     * @param spielfeld
     * @param explosionTime
     */
    public Block(Coordinate coordinates, boolean explodable, GameField spielfeld, int explosionTime) {
        super(coordinates, spielfeld, explosionTime);
        this.coords = coordinates;
        this.size = new Size(40, 40);
        this.explodable = explodable;
    }

    // ~~~~~~~~~~~~  getMethoden ~~~~~~~~~~~~
    /**
     * Gibt die Größe des Blocks als Size zurück.
     *
     * @author Felix
     * @return Size
     */
    public Size getSize() {
        return this.size;
    }

    /**
     * Gibt die Position des Blocks als Coordinate zurück.
     *
     * @author Felix
     * @return Coordinate
     */
    public Coordinate getPosition() {
        return this.coords;
    }

    /**
     * Gibt zurück, ob der Block explodieren kann.
     *
     * @author Felix
     * @return boolean
     */
    public boolean getExplodable() {
        return this.explodable;
    }

    // ~~~~~~~~~~~~  explode() Methode ~~~~~~~~~~~~
    /**
     * Löscht den Block vom Spielfeld, falls dieser zerstörbar ist.
     *
     * @author Felix
     */
    public void explode() {
        if (this.getExplodable() == true) {
            this.spielfeld.mapCoordToField(this.getPosition()).removeObject(this);
        }
    }
}
